<?php

/**
 * LoginForm class.
 * LoginForm is the data structure for keeping
 * user login form data. It is used by the 'login' action of 'SiteController'.
 */
class RegisterForm extends CFormModel
{
    public $username;
    public $password;
    public $password2;
    public $email;
    public $display_name;

    /**
     * Declares the validation rules.
     * The rules state that username and password are required,
     * and password needs to be authenticated.
     * @return array
     */
    public function rules()
    {
        return array(
            // username and password are required
            array('username, password, email,display_name', 'required'),
            array('username', 'length', 'max' => 60, 'min' => 6),
            array('password', 'length', 'max' => 250, 'min' => 6),
            array('password2', 'compare', 'compareAttribute' => 'password'),
            array('email', 'email'),
            array('display_name', 'length', 'max' => 250),
            // password needs to be authenticated
            array('username', 'checkUsername'),
            array('email', 'checkEmail'),
        );
    }

    /**
     * Declares attribute labels.
     * @return array
     */
    public function attributeLabels()
    {
        return array(
            'password2' => 'Nhập lại mật khẩu',
            'display_name' => 'Họ tên',
            'password'=>'Mật khẩu'
        );
    }

    /**
     * Authenticates the username.
     * @param $attribute
     * @param $params
     */
    public function checkUsername($attribute, $params)
    {
        $user = User::model()->find('LOWER(username=?)', array(strtolower($this->username)));
        if ($user !== null) {
            $this->addError('username', 'Username đã tồn tại!');
        }
    }

    /**
     * Authenticates the email
     * @param $attribute
     * @param $params
     */
    public function checkEmail($attribute, $params)
    {
        $user = User::model()->find('LOWER(email=?)', array(strtolower($this->email)));
        if ($user !== null) {
            $this->addError('email', 'Email đã tồn tại!');
        }
    }

    public function register()
    {
        $user = new User();
        $user->email = $this->email;
        $user->username = $this->username;
        $user->password = $user->hashPassword($this->password);
        $user->display_name = $this->display_name;
        if (Yii::app()->params['active_mail']) {
            //Send mail kích hoạt tài khoản
            $user->active_code = $this->generateActiveCode(10);
            $user->is_validated = 2;
            if ($user->save()) {
                $link = 'http://'.Yii::app()->request->getServerName();
                $link .= Yii::app()->createUrl('site/active',array('code'=>$user->active_code,'userid'=>$user->id));
                $body = 'Bạn vừa đăng ký thành viên tại <b>'.Yii::app()->name.'</b>. Vui lòng nhấn link bên dưới để kích hoạt tài khoản.</br>'.CHtml::link($link,$link);
                $this->sendActiveMail($user->email, $user->display_name, 'Kích hoạt tài khoản', $body);
            }
        }else{
            if($user->save()){
                $message = new YiiMailMessage();

                $message->setTo(array($user->email => $user->display_name));
                $message->setFrom(array(Yii::app()->params['adminEmail'] => Yii::app()->name));
                $message->setSubject('Đăng ký thành công');
                $body = 'Bạn đã đăng ký thành công:<br/>Username:'.$user->username.'</br>Password:'.$this->password;
                $message->setBody($body,'text/html');
                $message->view = 'register';
                Yii::app()->mail->send($message);
                Yii::app()->user->setFlash('register',
                    'Bạn đã đăng ký thành công');
            }
        }

    }

    public function sendActiveMail($email, $name, $subject, $body)
    {
        $message = new YiiMailMessage();

        $message->setTo(array($email => $name));
        $message->setFrom(array(Yii::app()->params['adminEmail'] => Yii::app()->name));
        $message->setSubject($subject);
        $message->setBody($body,'text/html');
        $message->view = 'register';
        Yii::app()->mail->send($message);

        Yii::app()->user->setFlash('register',
            'Một email kích hoạt đã được gửi đến: ' . $email . '<br/>' .
                'Vui lòng kiểm tra email để kích hoạt tài khoản.');
    }

    public function generateActiveCode($length)
    {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

        $size = strlen($chars);
        $str = '';
        for ($i = 0; $i < $length; $i++) {
            $str .= $chars[rand(0, $size - 1)];
        }

        return $str;
    }
}
